package com.itheima.window;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class LeetCode2461 {
    //给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和：
    //
    //子数组的长度是 k，且
    //子数组中的所有元素 各不相同 。
    //返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件，返回 0 。
    //
    //子数组 是数组中一段连续非空的元素序列。

    public long maximumSubarraySum(int[] nums, int k) {
        long max = 0;
        long sum = 0;
        int count = 0;
        HashMap<Integer,Integer> sumCount = new HashMap<>();
        //排除脏数据
        if (nums == null || nums.length < k){
            return  0;
        }

        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            count = mapAdd(sumCount, nums[i],count);
            if(i < k - 1){
                continue;
            }
            if (count == k){
                max = Math.max(max,sum);
            }
            sum = sum - nums[(i - k + 1)];
            count = mapDelete(sumCount, nums[i - k + 1],count);
        }
        return max;
    }

    private int mapAdd(HashMap<Integer, Integer> map, int key, int count){
        if(map.containsKey(key)){
            map.put(key, map.get(key) + 1);
        }else{
            map.put(key, 1);
            count++;
        }
        return count;
    }
    private int mapDelete(HashMap<Integer, Integer> map, int key,int count){
        if(map.containsKey(key)){
            map.put(key, map.get(key) - 1);
            if(map.get(key) == 0){
                map.remove(key);
                count--;
            }
        }
        return count;
    }
}
